{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Linear Regression"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Import required packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import cntk\n",
    "from cntk import Trainer, learning_rate_schedule, UnitType\n",
    "from cntk.learners import sgd\n",
    "from cntk.layers import default_options, Dense\n",
    "import argparse"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Define the parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "num_samples = 500\n",
    "initial_learning_rate = 0.001\n",
    "num_epochs = 300\n",
    "num_samples_to_train = 400\n",
    "batch_size = 25\n",
    "\n",
    "# Network has only one output which is its prediction.\n",
    "input_dim = 1\n",
    "num_outputs = 1\n",
    "num_minibatches_to_train = int(num_samples_to_train / batch_size)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Arbitrary data creation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# random data\n",
    "features = np.linspace(-1, 1, num_samples)\n",
    "predictions = 2 * features + np.random.randn(*features.shape) * 0.5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Scatter plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f72a3536390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(features, predictions, c='r')\n",
    "plt.xlabel(\"X\")\n",
    "plt.ylabel(\"Y\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Adding one dimension for further processing. Input must be formatted as (batch_size,1)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "features = features[:,None]\n",
    "predictions = predictions[:,None]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Network Architecture"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Output is a single node with a linear operation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "input = cntk.input_variable(input_dim)\n",
    "label = cntk.input_variable(num_outputs)\n",
    "pred = Dense(num_outputs)(input)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Defining loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "loss = cntk.squared_error(pred, label)\n",
    "eval_fun = cntk.squared_error(pred, label)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Training"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Instantiate the trainer object to drive the model training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "learning_rate = learning_rate_schedule(initial_learning_rate, UnitType.minibatch)\n",
    "optimizer_op = sgd(pred.parameters, learning_rate)\n",
    "train_op = Trainer(pred, (loss, eval_fun), [optimizer_op])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Training loop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/sina/anaconda/envs/cntk-py35/lib/python3.5/site-packages/cntk/core.py:351: UserWarning: your data is of type \"float64\", but your input variable (uid \"Input4\") expects \"<class 'numpy.float32'>\". Please convert your data beforehand to speed up training.\n",
      "  (sample.dtype, var.uid, str(var.dtype)))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 1, Loss: 2.64\n",
      "Epoch: 2, Loss: 2.65\n",
      "Epoch: 3, Loss: 2.67\n",
      "Epoch: 4, Loss: 2.68\n",
      "Epoch: 5, Loss: 2.69\n",
      "Epoch: 6, Loss: 2.70\n",
      "Epoch: 7, Loss: 2.71\n",
      "Epoch: 8, Loss: 2.72\n",
      "Epoch: 9, Loss: 2.72\n",
      "Epoch: 10, Loss: 2.73\n",
      "Epoch: 11, Loss: 2.73\n",
      "Epoch: 12, Loss: 2.73\n",
      "Epoch: 13, Loss: 2.73\n",
      "Epoch: 14, Loss: 2.73\n",
      "Epoch: 15, Loss: 2.72\n",
      "Epoch: 16, Loss: 2.72\n",
      "Epoch: 17, Loss: 2.72\n",
      "Epoch: 18, Loss: 2.71\n",
      "Epoch: 19, Loss: 2.70\n",
      "Epoch: 20, Loss: 2.70\n",
      "Epoch: 21, Loss: 2.69\n",
      "Epoch: 22, Loss: 2.68\n",
      "Epoch: 23, Loss: 2.67\n",
      "Epoch: 24, Loss: 2.66\n",
      "Epoch: 25, Loss: 2.64\n",
      "Epoch: 26, Loss: 2.63\n",
      "Epoch: 27, Loss: 2.62\n",
      "Epoch: 28, Loss: 2.60\n",
      "Epoch: 29, Loss: 2.59\n",
      "Epoch: 30, Loss: 2.57\n",
      "Epoch: 31, Loss: 2.56\n",
      "Epoch: 32, Loss: 2.54\n",
      "Epoch: 33, Loss: 2.52\n",
      "Epoch: 34, Loss: 2.51\n",
      "Epoch: 35, Loss: 2.49\n",
      "Epoch: 36, Loss: 2.47\n",
      "Epoch: 37, Loss: 2.45\n",
      "Epoch: 38, Loss: 2.43\n",
      "Epoch: 39, Loss: 2.42\n",
      "Epoch: 40, Loss: 2.40\n",
      "Epoch: 41, Loss: 2.38\n",
      "Epoch: 42, Loss: 2.36\n",
      "Epoch: 43, Loss: 2.34\n",
      "Epoch: 44, Loss: 2.32\n",
      "Epoch: 45, Loss: 2.30\n",
      "Epoch: 46, Loss: 2.28\n",
      "Epoch: 47, Loss: 2.26\n",
      "Epoch: 48, Loss: 2.24\n",
      "Epoch: 49, Loss: 2.21\n",
      "Epoch: 50, Loss: 2.19\n",
      "Epoch: 51, Loss: 2.17\n",
      "Epoch: 52, Loss: 2.15\n",
      "Epoch: 53, Loss: 2.13\n",
      "Epoch: 54, Loss: 2.11\n",
      "Epoch: 55, Loss: 2.09\n",
      "Epoch: 56, Loss: 2.07\n",
      "Epoch: 57, Loss: 2.05\n",
      "Epoch: 58, Loss: 2.03\n",
      "Epoch: 59, Loss: 2.00\n",
      "Epoch: 60, Loss: 1.98\n",
      "Epoch: 61, Loss: 1.96\n",
      "Epoch: 62, Loss: 1.94\n",
      "Epoch: 63, Loss: 1.92\n",
      "Epoch: 64, Loss: 1.90\n",
      "Epoch: 65, Loss: 1.88\n",
      "Epoch: 66, Loss: 1.86\n",
      "Epoch: 67, Loss: 1.84\n",
      "Epoch: 68, Loss: 1.82\n",
      "Epoch: 69, Loss: 1.80\n",
      "Epoch: 70, Loss: 1.78\n",
      "Epoch: 71, Loss: 1.76\n",
      "Epoch: 72, Loss: 1.74\n",
      "Epoch: 73, Loss: 1.72\n",
      "Epoch: 74, Loss: 1.70\n",
      "Epoch: 75, Loss: 1.68\n",
      "Epoch: 76, Loss: 1.66\n",
      "Epoch: 77, Loss: 1.64\n",
      "Epoch: 78, Loss: 1.62\n",
      "Epoch: 79, Loss: 1.60\n",
      "Epoch: 80, Loss: 1.58\n",
      "Epoch: 81, Loss: 1.56\n",
      "Epoch: 82, Loss: 1.55\n",
      "Epoch: 83, Loss: 1.53\n",
      "Epoch: 84, Loss: 1.51\n",
      "Epoch: 85, Loss: 1.49\n",
      "Epoch: 86, Loss: 1.47\n",
      "Epoch: 87, Loss: 1.45\n",
      "Epoch: 88, Loss: 1.44\n",
      "Epoch: 89, Loss: 1.42\n",
      "Epoch: 90, Loss: 1.40\n",
      "Epoch: 91, Loss: 1.39\n",
      "Epoch: 92, Loss: 1.37\n",
      "Epoch: 93, Loss: 1.35\n",
      "Epoch: 94, Loss: 1.34\n",
      "Epoch: 95, Loss: 1.32\n",
      "Epoch: 96, Loss: 1.30\n",
      "Epoch: 97, Loss: 1.29\n",
      "Epoch: 98, Loss: 1.27\n",
      "Epoch: 99, Loss: 1.26\n",
      "Epoch: 100, Loss: 1.24\n",
      "Epoch: 101, Loss: 1.22\n",
      "Epoch: 102, Loss: 1.21\n",
      "Epoch: 103, Loss: 1.19\n",
      "Epoch: 104, Loss: 1.18\n",
      "Epoch: 105, Loss: 1.16\n",
      "Epoch: 106, Loss: 1.15\n",
      "Epoch: 107, Loss: 1.14\n",
      "Epoch: 108, Loss: 1.12\n",
      "Epoch: 109, Loss: 1.11\n",
      "Epoch: 110, Loss: 1.09\n",
      "Epoch: 111, Loss: 1.08\n",
      "Epoch: 112, Loss: 1.07\n",
      "Epoch: 113, Loss: 1.05\n",
      "Epoch: 114, Loss: 1.04\n",
      "Epoch: 115, Loss: 1.03\n",
      "Epoch: 116, Loss: 1.01\n",
      "Epoch: 117, Loss: 1.00\n",
      "Epoch: 118, Loss: 0.99\n",
      "Epoch: 119, Loss: 0.98\n",
      "Epoch: 120, Loss: 0.97\n",
      "Epoch: 121, Loss: 0.95\n",
      "Epoch: 122, Loss: 0.94\n",
      "Epoch: 123, Loss: 0.93\n",
      "Epoch: 124, Loss: 0.92\n",
      "Epoch: 125, Loss: 0.91\n",
      "Epoch: 126, Loss: 0.90\n",
      "Epoch: 127, Loss: 0.88\n",
      "Epoch: 128, Loss: 0.87\n",
      "Epoch: 129, Loss: 0.86\n",
      "Epoch: 130, Loss: 0.85\n",
      "Epoch: 131, Loss: 0.84\n",
      "Epoch: 132, Loss: 0.83\n",
      "Epoch: 133, Loss: 0.82\n",
      "Epoch: 134, Loss: 0.81\n",
      "Epoch: 135, Loss: 0.80\n",
      "Epoch: 136, Loss: 0.79\n",
      "Epoch: 137, Loss: 0.78\n",
      "Epoch: 138, Loss: 0.77\n",
      "Epoch: 139, Loss: 0.76\n",
      "Epoch: 140, Loss: 0.75\n",
      "Epoch: 141, Loss: 0.74\n",
      "Epoch: 142, Loss: 0.73\n",
      "Epoch: 143, Loss: 0.73\n",
      "Epoch: 144, Loss: 0.72\n",
      "Epoch: 145, Loss: 0.71\n",
      "Epoch: 146, Loss: 0.70\n",
      "Epoch: 147, Loss: 0.69\n",
      "Epoch: 148, Loss: 0.68\n",
      "Epoch: 149, Loss: 0.68\n",
      "Epoch: 150, Loss: 0.67\n",
      "Epoch: 151, Loss: 0.66\n",
      "Epoch: 152, Loss: 0.65\n",
      "Epoch: 153, Loss: 0.64\n",
      "Epoch: 154, Loss: 0.64\n",
      "Epoch: 155, Loss: 0.63\n",
      "Epoch: 156, Loss: 0.62\n",
      "Epoch: 157, Loss: 0.61\n",
      "Epoch: 158, Loss: 0.61\n",
      "Epoch: 159, Loss: 0.60\n",
      "Epoch: 160, Loss: 0.59\n",
      "Epoch: 161, Loss: 0.59\n",
      "Epoch: 162, Loss: 0.58\n",
      "Epoch: 163, Loss: 0.57\n",
      "Epoch: 164, Loss: 0.57\n",
      "Epoch: 165, Loss: 0.56\n",
      "Epoch: 166, Loss: 0.55\n",
      "Epoch: 167, Loss: 0.55\n",
      "Epoch: 168, Loss: 0.54\n",
      "Epoch: 169, Loss: 0.53\n",
      "Epoch: 170, Loss: 0.53\n",
      "Epoch: 171, Loss: 0.52\n",
      "Epoch: 172, Loss: 0.52\n",
      "Epoch: 173, Loss: 0.51\n",
      "Epoch: 174, Loss: 0.51\n",
      "Epoch: 175, Loss: 0.50\n",
      "Epoch: 176, Loss: 0.49\n",
      "Epoch: 177, Loss: 0.49\n",
      "Epoch: 178, Loss: 0.48\n",
      "Epoch: 179, Loss: 0.48\n",
      "Epoch: 180, Loss: 0.47\n",
      "Epoch: 181, Loss: 0.47\n",
      "Epoch: 182, Loss: 0.46\n",
      "Epoch: 183, Loss: 0.46\n",
      "Epoch: 184, Loss: 0.45\n",
      "Epoch: 185, Loss: 0.45\n",
      "Epoch: 186, Loss: 0.44\n",
      "Epoch: 187, Loss: 0.44\n",
      "Epoch: 188, Loss: 0.44\n",
      "Epoch: 189, Loss: 0.43\n",
      "Epoch: 190, Loss: 0.43\n",
      "Epoch: 191, Loss: 0.42\n",
      "Epoch: 192, Loss: 0.42\n",
      "Epoch: 193, Loss: 0.41\n",
      "Epoch: 194, Loss: 0.41\n",
      "Epoch: 195, Loss: 0.41\n",
      "Epoch: 196, Loss: 0.40\n",
      "Epoch: 197, Loss: 0.40\n",
      "Epoch: 198, Loss: 0.39\n",
      "Epoch: 199, Loss: 0.39\n",
      "Epoch: 200, Loss: 0.39\n",
      "Epoch: 201, Loss: 0.38\n",
      "Epoch: 202, Loss: 0.38\n",
      "Epoch: 203, Loss: 0.38\n",
      "Epoch: 204, Loss: 0.37\n",
      "Epoch: 205, Loss: 0.37\n",
      "Epoch: 206, Loss: 0.37\n",
      "Epoch: 207, Loss: 0.36\n",
      "Epoch: 208, Loss: 0.36\n",
      "Epoch: 209, Loss: 0.36\n",
      "Epoch: 210, Loss: 0.35\n",
      "Epoch: 211, Loss: 0.35\n",
      "Epoch: 212, Loss: 0.35\n",
      "Epoch: 213, Loss: 0.34\n",
      "Epoch: 214, Loss: 0.34\n",
      "Epoch: 215, Loss: 0.34\n",
      "Epoch: 216, Loss: 0.33\n",
      "Epoch: 217, Loss: 0.33\n",
      "Epoch: 218, Loss: 0.33\n",
      "Epoch: 219, Loss: 0.33\n",
      "Epoch: 220, Loss: 0.32\n",
      "Epoch: 221, Loss: 0.32\n",
      "Epoch: 222, Loss: 0.32\n",
      "Epoch: 223, Loss: 0.32\n",
      "Epoch: 224, Loss: 0.31\n",
      "Epoch: 225, Loss: 0.31\n",
      "Epoch: 226, Loss: 0.31\n",
      "Epoch: 227, Loss: 0.31\n",
      "Epoch: 228, Loss: 0.30\n",
      "Epoch: 229, Loss: 0.30\n",
      "Epoch: 230, Loss: 0.30\n",
      "Epoch: 231, Loss: 0.30\n",
      "Epoch: 232, Loss: 0.30\n",
      "Epoch: 233, Loss: 0.29\n",
      "Epoch: 234, Loss: 0.29\n",
      "Epoch: 235, Loss: 0.29\n",
      "Epoch: 236, Loss: 0.29\n",
      "Epoch: 237, Loss: 0.29\n",
      "Epoch: 238, Loss: 0.28\n",
      "Epoch: 239, Loss: 0.28\n",
      "Epoch: 240, Loss: 0.28\n",
      "Epoch: 241, Loss: 0.28\n",
      "Epoch: 242, Loss: 0.28\n",
      "Epoch: 243, Loss: 0.27\n",
      "Epoch: 244, Loss: 0.27\n",
      "Epoch: 245, Loss: 0.27\n",
      "Epoch: 246, Loss: 0.27\n",
      "Epoch: 247, Loss: 0.27\n",
      "Epoch: 248, Loss: 0.27\n",
      "Epoch: 249, Loss: 0.26\n",
      "Epoch: 250, Loss: 0.26\n",
      "Epoch: 251, Loss: 0.26\n",
      "Epoch: 252, Loss: 0.26\n",
      "Epoch: 253, Loss: 0.26\n",
      "Epoch: 254, Loss: 0.26\n",
      "Epoch: 255, Loss: 0.26\n",
      "Epoch: 256, Loss: 0.25\n",
      "Epoch: 257, Loss: 0.25\n",
      "Epoch: 258, Loss: 0.25\n",
      "Epoch: 259, Loss: 0.25\n",
      "Epoch: 260, Loss: 0.25\n",
      "Epoch: 261, Loss: 0.25\n",
      "Epoch: 262, Loss: 0.25\n",
      "Epoch: 263, Loss: 0.25\n",
      "Epoch: 264, Loss: 0.24\n",
      "Epoch: 265, Loss: 0.24\n",
      "Epoch: 266, Loss: 0.24\n",
      "Epoch: 267, Loss: 0.24\n",
      "Epoch: 268, Loss: 0.24\n",
      "Epoch: 269, Loss: 0.24\n",
      "Epoch: 270, Loss: 0.24\n",
      "Epoch: 271, Loss: 0.24\n",
      "Epoch: 272, Loss: 0.24\n",
      "Epoch: 273, Loss: 0.24\n",
      "Epoch: 274, Loss: 0.23\n",
      "Epoch: 275, Loss: 0.23\n",
      "Epoch: 276, Loss: 0.23\n",
      "Epoch: 277, Loss: 0.23\n",
      "Epoch: 278, Loss: 0.23\n",
      "Epoch: 279, Loss: 0.23\n",
      "Epoch: 280, Loss: 0.23\n",
      "Epoch: 281, Loss: 0.23\n",
      "Epoch: 282, Loss: 0.23\n",
      "Epoch: 283, Loss: 0.23\n",
      "Epoch: 284, Loss: 0.23\n",
      "Epoch: 285, Loss: 0.23\n",
      "Epoch: 286, Loss: 0.22\n",
      "Epoch: 287, Loss: 0.22\n",
      "Epoch: 288, Loss: 0.22\n",
      "Epoch: 289, Loss: 0.22\n",
      "Epoch: 290, Loss: 0.22\n",
      "Epoch: 291, Loss: 0.22\n",
      "Epoch: 292, Loss: 0.22\n",
      "Epoch: 293, Loss: 0.22\n",
      "Epoch: 294, Loss: 0.22\n",
      "Epoch: 295, Loss: 0.22\n",
      "Epoch: 296, Loss: 0.22\n",
      "Epoch: 297, Loss: 0.22\n",
      "Epoch: 298, Loss: 0.22\n",
      "Epoch: 299, Loss: 0.22\n",
      "Epoch: 300, Loss: 0.22\n"
     ]
    }
   ],
   "source": [
    "for epoch in range(0, num_epochs):\n",
    "    for batch_num in range(0, num_minibatches_to_train):\n",
    "        batch_features = features[(batch_num * batch_size):(batch_num * batch_size + batch_size), :].astype(np.float32)\n",
    "        batch_labels = predictions[(batch_num * batch_size):(batch_num * batch_size + batch_size), :]\n",
    "        train_op.train_minibatch({input: batch_features, label: batch_labels})\n",
    "        training_loss = train_op.previous_minibatch_loss_average\n",
    "        eval_value = train_op.previous_minibatch_evaluation_average\n",
    "    print(\"Epoch: {0}, Loss: {1:.2f}\".format(epoch+1, training_loss))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Model Evaluation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Test data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "test_features = features[num_samples_to_train:num_samples, :]\n",
    "test_labels = predictions[num_samples_to_train:num_samples, :]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Train data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train_features = features[0:num_samples_to_train, :]\n",
    "train_labels = predictions[0:num_samples_to_train, :]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Print weight and bias"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Trained parameters are: w= 1.57, b=-0.12\n"
     ]
    }
   ],
   "source": [
    "print(\"Trained parameters are: w= {0:.2f}, b={1:.2f}\".format(pred.W.value[0][0], pred.b.value[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Evaluation of training set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f72a06b3eb8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(train_features[:,0], train_labels[:,0], c='b')\n",
    "X = train_features[:,0]\n",
    "Y = pred.W.value[0] * train_features[:,0] + pred.b.value[0]\n",
    "plt.plot(X, Y, 'r')\n",
    "plt.xlabel(\"Feature\")\n",
    "plt.ylabel(\"Predicted\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Evaluation on test set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n2rnZs6GQAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f72985360f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(test_features[:,0], test_labels[:,0], c='b')\n",
    "X = test_features[:,0]\n",
    "Y = pred.W.value[0] * test_features[:,0] + pred.b.value[0]\n",
    "plt.plot(X, Y, 'r')\n",
    "plt.xlabel(\"Feature\")\n",
    "plt.ylabel(\"Predicted\")\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
